package com.ruoyi.system.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.common.core.domain.entity.SysModule;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 功能模块-角色-数据权限关联表 数据层
 */
public interface SysModuleMapper {
    /**
     * 根据表名查询功能模块（默认权限）
     *
     * @param tableName 表名
     * @return 功能模块 默认权限
     */
    SysModule selectModuleByTableName(@Param("tableName") String tableName);

    /**
     * 根据表名和角色ID查询功能模块权限配置
     *
     * @param tableName 表名
     * @param roleIds 角色ID列表
     * @return 功能模块权限配置列表
     */
    List<SysModule> selectModuleByTableNameAndRoleIds(@Param("tableName") String tableName, @Param("roleIds") List<Long> roleIds);

    /**
     * 分页查询功能模块列表
     *
     * @param page 分页信息
     * @param module 功能模块信息
     * @return 功能模块列表
     */
    IPage<SysModule> selectModuleList(IPage<SysModule> page, @Param("module") SysModule module);

    /**
     * 根据ID查询模块
     *
     * @param moduleId 模块ID
     * @return 功能模块信息
     */
    SysModule selectModuleById(Long moduleId);

    /**
     * 新增模块
     *
     * @param module 功能模块信息
     * @return 结果
     */
    int insertModule(SysModule module);

    /**
     * 修改模块
     *
     * @param module 功能模块信息
     * @return 结果
     */
    int updateModule(SysModule module);

    /**
     * 批量删除模块
     *
     * @param moduleIds 模块ID列表
     * @return 结果
     */
    int deleteModuleByIds(Long[] moduleIds);

    /**
     * 检查模块名称是否存在
     *
     * @param moduleName 模块名称
     * @param roleId 角色ID（为空表示默认权限）
     * @return 功能模块信息
     */
    SysModule checkModuleNameExist(@Param("moduleName") String moduleName, @Param("roleId") Long roleId);

    /**
     * 检查关联表名是否存在
     *
     * @param tableName 关联表名
     * @param roleId 角色ID（为空表示默认权限）
     * @return 功能模块信息
     */
    SysModule checkTableNameExist(@Param("tableName") String tableName, @Param("roleId") Long roleId);

    /**
     * 删除单模块数据
     *
     * @param moduleId
     * @return
     */
    int deleteModuleById(Long moduleId);

    /**
     * 查询某表对应的默认模块
     * @param menuName
     * @return
     */
    SysModule getDefaultModuleByModuleName(String menuName);
}